package com.hup.utils.commons.start;

import com.hup.utils.commons.DateBuilder;
import com.hup.utils.commons.TextUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import java.util.Date;

/**
 * 版本信息<p>
 * 数据来源与resources下的[version.properties]<p>
 * 原生PropertySource不支持yml,yml需要额外代码支持,所以使用properties
 *
 * @author hugan
 * @date 2019/8/16
 */
@Configuration
//@ConfigurationProperties(prefix = "app")//可以方便注入,但不支持final,和字段二次处理
@PropertySource(value = "classpath:/version.properties", encoding = "utf-8")
public class VersionConfig {

    /**
     * pom中的项目名, 可以使用 {@link StartupInfo#getApplicationChName()}获取中文名
     */
    public final String appName;
    /**
     * pom中的版本号
     */
    public final String version;
    /**
     * maven打包时间
     */
    public final String buildTime;
    /**
     * 环境标志:省缺时为空字符串,可以在application.properties配置&覆盖本字段
     */
    public final String env;

    public VersionConfig(@Value("${app.name}") String appName,
            @Value("${app.version}") String version,
            @Value("${app.buildTime}") String buildTime,
            @Value("${app.env}") String env
    ) {
        this.appName = appName;
        this.version = version;
        Date date;
        try {
            date = DateBuilder.GMT2MGT8(buildTime, DateBuilder.YMD_HMS);
        } catch (Exception e) {
            date = null;
        }
        this.buildTime = DateBuilder.ymdHms(date);
        if (!TextUtil.isBlank(env)) {
            this.env = env;
        } else {
            this.env = null;
        }
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Version{");
        sb.append(appName);
        sb.append('-').append(version);
        sb.append(", buildAt[").append(buildTime).append(']');
        if (env != null) sb.append(", env=").append(env);
        sb.append('}');
        return sb.toString();
    }

}
